#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }

class QAction;
class QMenu;

class File_manager;
class Frequency_information_model;
class Information;
QT_END_NAMESPACE

/******************************************
  @copyright qiaowei
  @author    qiaowei
  @version   1.0
  @date      2020-07-24
  @brief     用户UI
*******************************************/

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    /***************************************************************************
     @author   qiaowei
     @version  1.0
     @date     2021-01-08
     @brief    初始化QAction变量
    ***************************************************************************/
    void setup_actions();

    /***************************************************************************
     @author   qiaowei
     @version  1.0
     @date     2021-01-08
     @brief    未启用此方法
    ***************************************************************************/
    void setup_attributes();

    /***************************************************************************
     @author   qiaowei
     @version  1.0
     @date     2021-01-08
     @brief    创建信号槽
    ***************************************************************************/
    void setup_connections();

    /***************************************************************************
     @author   qiaowei
     @version  1.0
     @date     2021-01-08
     @brief    设置菜单栏
    ***************************************************************************/
    void setup_menus();

    /***************************************************************************
     @author   qiaowei
     @version  1.0
     @date     2021-01-08
     @brief    根据数据源列表设置模型/视图
     @param    list 台站频率列表
    ***************************************************************************/
    void set_model_and_view(QList<Information*>* list);

private slots:
    /**********************************************************
     @author   qiaowei
     @version  1.0
     @date     2020-12-31
     @brief    打开对话框，选取txt文件读取台站信息
    ***********************************************************/
    void open_dialog();

    /***************************************************************************
     @author   qiaowei
     @version  1.0
     @date     2021-01-08
     @brief    根据编辑框录入的频率信息，与txt读取的台站信息进行对比是否有三阶互调
    ***************************************************************************/
    void calculate_frequency();

    /***************************************************************************
     @author   qiaowei
     @version  1.0
     @date     2021-01-08
     @brief    根据传入的台站信息设置模型、绑定视图，并设置互调计算按钮的状态
     @param    list 台站信息
    ***************************************************************************/
    void set_informations_list_in_model_view(QList<Information*>* list);

    /***************************************************************************
     @author   qiaowei
     @version  1.0
     @date     2021-01-08
     @brief    显示所选台站名称
     @param    station_name 台站名称
    ***************************************************************************/
    void setup_station_name(QString station_name);

private:
    Ui::MainWindow *ui;

    /***************************************************************************
     @author   qiaowei
     @version  1.0
     @date     2021-01-08
     @brief    菜单栏
    ***************************************************************************/
    QMenu* file_menu_;

    /***************************************************************************
     @author   qiaowei
     @version  1.0
     @date     2021-01-08
     @brief    打开对话框，选择txt文件Action
    ***************************************************************************/
    QAction* open_action_;

    /***************************************************************************
     @author   qiaowei
     @version  1.0
     @date     2021-01-08
     @brief    退出程序Action
    ***************************************************************************/
    QAction* exit_action_;

    /***************************************************************************
     @author   qiaowei
     @version  1.0
     @date     2021-01-08
     @brief    操控文件对象，在构造方法前初始化
    ***************************************************************************/
    File_manager* manager_;

    /***************************************************************************
     @author   qiaowei
     @version  1.0
     @date     2021-01-08
     @brief    模型对象，保存从txt文件中读取的台站信息，在构造方法前初始化
    ***************************************************************************/
    Frequency_information_model* model_;
};
#endif // MAINWINDOW_H
